/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.faimg.pomar.modelo.dao;

import br.faimg.pomar.modelo.interfaces.CRUDInterface;
import br.faimg.pomar.modelo.pojo.Estacao;
import br.faimg.pomar.modelo.pojo.TipodeEstacao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author diogo
 */


public class EstacaoDAO implements CRUDInterface<Estacao>{

    public void create(Estacao pojo) {
         Connection con = null;
         PreparedStatement stm = null;
         String sql = "insert into ESTACAO values(?,?,?);";
        
         try {

             con = ConnectionManager.getInstance().getConnection();
             stm = con.prepareStatement(sql);
             stm.setString(1, pojo.getCodigo());
             stm.setString(2, pojo.getTipo().getCodigo());
             stm.setString(3, pojo.getDescricao());
             stm.execute();
        
         } catch (SQLException ex) {
            Logger.getLogger(TipodeEstacaoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }finally {
            
            if (stm != null){
             
                try {
                    stm.close();
                } catch (SQLException ex) {
                    Logger.getLogger(TipodeEstacaoDAO.class.getName()).log(Level.SEVERE, null, ex);
                }
            
            }
            
        
            if (con != null){
                
                try {
                    con.close();
                } catch (SQLException ex) {
                    Logger.getLogger(TipodeEstacaoDAO.class.getName()).log(Level.SEVERE, null, ex);
                }
            
            }
        
        }
    }

    public void update(Estacao pojo) {
       Connection con = null;
        PreparedStatement stm = null;
        String sql = "update ESTACAO set est_descricao = ?, est_tpe_codigo = ? where est_codigo  = ?";

        try {

            con = ConnectionManager.getInstance().getConnection();
            stm = con.prepareStatement(sql);
            stm.setString(1, pojo.getDescricao());
            stm.setString(2, pojo.getTipo().getCodigo());
            stm.setString(3, pojo.getCodigo());
            stm.execute();

        } catch (SQLException ex) {
            Logger.getLogger(TipodeProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
        } finally {

            if (stm != null) {

                try {
                    stm.close();
                } catch (SQLException ex) {
                    Logger.getLogger(TipodeProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
                }

            }


            if (con != null) {

                try {
                    con.close();
                } catch (SQLException ex) {
                    Logger.getLogger(TipodeProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
                }

            }

        }

    }

    public List<Estacao> readByExample(Estacao pojo) {
        Connection con = null;
        PreparedStatement stm = null;
        ResultSet rs = null;

        String sql = "select * from estacao,tipo_estacao where  est_descricao ilike ? and est_tpe_codigo = tpe_codigo";
        
        List<Estacao> estacoes = new ArrayList<Estacao>();

        if (pojo == null) {

            pojo = new Estacao();
        }

        if (pojo.getDescricao() == null) {

            pojo.setDescricao("");

        }

        con = ConnectionManager.getInstance().getConnection();
        try {
            stm = con.prepareStatement(sql);
            stm.setString(1, "%"+ pojo.getDescricao() +"%");
            rs = stm.executeQuery();

            while (rs.next()) {
                Estacao temp = new Estacao();
                TipodeEstacao tipo = new TipodeEstacao();
                
                temp.setCodigo(rs.getString("est_codigo"));
                temp.setDescricao(rs.getString("est_descricao"));
                
                tipo.setCodigo(rs.getString("tpe_codigo"));
                tipo.setDescricao(rs.getString("tpe_descricao"));
                
                temp.setTipo(tipo);
                estacoes.add(temp);
            }

        } catch (SQLException ex) {
            Logger.getLogger(TipodeProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }

        return estacoes;
    }
    
    public Estacao readById(String codigo) {
        Connection con = null;
        PreparedStatement stm = null;
        ResultSet rs = null;

        String sql = "select * from estacao,tipo_estacao where est_tpe_codigo = tpe_codigo and est_codigo = ?";

        Estacao estacao = new Estacao();

        if (codigo != null) {

            con = ConnectionManager.getInstance().getConnection();
            try {
                stm = con.prepareStatement(sql);
                stm.setString(1, codigo);
                rs = stm.executeQuery();
                
                //System.out.println(EstacaoDAO.class.toString() + " ::: " + stm.toString());
                
                while (rs.next()) {
                    Estacao temp = new Estacao();
                    TipodeEstacao tipo = new TipodeEstacao();

                    temp.setCodigo(rs.getString("est_codigo"));
                    temp.setDescricao(rs.getString("est_descricao"));

                    tipo.setCodigo(rs.getString("tpe_codigo"));
                    tipo.setDescricao(rs.getString("tpe_descricao"));

                    temp.setTipo(tipo);

                    estacao = temp;
               }

            } catch (SQLException ex) {
                Logger.getLogger(TipodeProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
            }

        }

        return estacao;
    }

    public void delete(String codigo) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public Estacao readById(Integer codigo) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void delete(Integer codigo) {
        throw new UnsupportedOperationException("Not supported yet.");
    }




}